// //IO函子
const fp = require('lodash/fp')
class IO {
    static of(value){
        return new IO(function(){
            return value
        })
    }
    constructor(fn){
        this._value = fn
    }
    map(fn){
        return new IO(fp.flowRight(fn,this._value))
    }
}
let r = IO.of(process).map(p => p.execPath)
console.log(r)
console.log(r._value())//_value() 被包裹的函数可能是不纯的  把副作用延迟到调用的时候发生

